<script setup>
import { onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app'
import { ref } from 'vue'
import { apiGetBanner, apiGetClassify, apiGetNoticeList, apiGetRandomWall } from '../../api/apis'
const goPreview = id => {
  uni.setStorageSync('storageClassList', randomList.value)
  uni.navigateTo({ url: '/pages/preview/preview?id=' + id })
}
const onClickNotice = _id => uni.navigateTo({ url: '/pages/notice/notice-detail?id=' + _id })

// get banner list
const bannerList = ref([])
const getBanner = async () => {
  let res = await apiGetBanner()
  bannerList.value = res.data
}
getBanner()

// get random pic list
const randomList = ref([])
const getRandomList = async () => {
  let res = await apiGetRandomWall()
  randomList.value = res.data
}
getRandomList()

// get noticeList
const noticeList = ref([])
const getNoticeList = async () => {
  let res = await apiGetNoticeList({ select: true })
  noticeList.value = res.data
}
getNoticeList()

// getClassify
const classifyList = ref([])
const getClassify = async () => {
  let res = await apiGetClassify({ select: true })
  console.log(res.data)
  classifyList.value = res.data
}
getClassify()

// share app
onShareAppMessage(e => {
  return {
    title: '咸虾米壁纸 精选分类',
    path: '/pages/index/index'
  }
})
onShareTimeline(e => {
  return {
    title: '咸虾米壁纸 精选分类'
  }
})
</script>
<template>
  <view class="homeLayout pageBg">
    <!-- custom header -->
    <custom-nav-bar title="推荐"></custom-nav-bar>
    <!-- banner -->
    <view class="banner">
      <swiper indicator-dots indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#fff" autoplay circular>
        <swiper-item v-for="item in bannerList" :key="item._id">

          <navigator v-if="item.target == 'miniProgram'" class="like" :url="item.url" target="miniProgram" :app-id="item.appid">
            <image :src="item.picurl" mode="aspectFill"></image>
          </navigator>

          <navigator v-else class="like" :url="`/pages/classlist/classlist?${item._id}`">
            <image :src="item.picurl" mode="aspectFill"></image>
          </navigator>

        </swiper-item>
      </swiper>
    </view>
    <!-- notice -->
    <view class="notice">
      <view class="left">
        <uni-icons type="sound-filled" size="30"></uni-icons>
        <text class="text">公告</text>
      </view>
      <view class="center">
        <swiper vertical autoplay interval="1500" duration="300" circular>
          <swiper-item v-for="item in noticeList" :key="item._id" @click="onClickNotice(item._id)">{{ item.title }}</swiper-item>
        </swiper>
      </view>
      <view class="right">
        <uni-icons type="right" size="16" color="#333"></uni-icons>
      </view>
    </view>

    <!-- select -->
    <view class="select">
      <common-title>
        <template #name>每日推荐</template>
        <template #custom>
          <view class="date">
            <uni-icons type="calendar" size="18"></uni-icons>
            <view class="text">
              <uni-dateformat :date="Date.now()" format="dd日"></uni-dateformat>
            </view>
          </view>
        </template>
      </common-title>
      <view class="content">
        <scroll-view scroll-x>
          <view class="box" v-for="item in randomList" :key="item._id" @click="goPreview(item._id)">
            <image :src="item.smallPicurl" mode="aspectFill"></image>
          </view>
        </scroll-view>
      </view>
    </view>
    <!-- theme -->
    <view class="theme">
      <common-title>
        <template #name>专题精选</template>
        <template #custom>
          <navigator url="/pages/classify/classify" open-type="reLaunch" class="more">More+</navigator>
        </template>
      </common-title>
      <view class="content">
        <theme-item v-for="item in classifyList" :key="item._id" :item="item"></theme-item>
        <theme-item :isMore="true"></theme-item>
      </view>
    </view>
  </view>
</template>

<style lang="scss" scoped>
.homeLayout {
  .banner {
    width: 750rpx;
    padding: 30rpx 0;

    swiper {
      width: 750rpx;
      height: 340rpx;

      // &->super
      &-item {
        width: 100%;
        height: 100%;
        padding: 0 30rpx;
        .like {
          width: 100%;
          height: 100%;
          image {
            width: 100%;
            height: 100%;
            border-radius: 10rpx;
          }
        }
        image {
          width: 100%;
          height: 100%;
          border-radius: 10rpx;
        }
      }
    }
  }

  .notice {
    width: 690rpx;
    height: 80rpx;
    line-height: 80rpx;
    background: #f9f9f9;
    margin: 0 auto;
    border-radius: 80rpx;
    display: flex;

    .left {
      width: 140rpx;
      display: flex;
      align-items: center;
      justify-content: center;

      // 穿透
      :deep() {
        .uni-icons {
          color: $brand-theme-color !important;
        }
      }

      .text {
        color: $brand-theme-color;
        font-weight: 600;
        font-size: 28rpx;
      }
    }

    .center {
      flex: 1;

      swiper {
        height: 100%;

        &-item {
          height: 100%;
          font-size: 30rpx;
          color: #666;
          overflow: hidden;
          white-space: nowrap;
          text-overflow: ellipsis; // 超出部分省略
        }
      }
    }

    .right {
      width: 70rpx;
      display: flex;
      align-items: center;
      justify-content: center;
    }
  }

  .select {
    padding-top: 50rpx;

    .date {
      color: $brand-theme-color;
      display: flex;
      align-items: center;

      :deep() {
        .uni-icons {
          color: $brand-theme-color !important;
        }
      }

      .text {
        margin-left: 5rpx;
      }
    }

    .content {
      width: 720rpx;
      margin-left: 30rpx;
      margin-top: 30rpx;

      scroll-view {
        white-space: nowrap;

        .box {
          width: 200rpx;
          height: 430rpx;
          display: inline-block;
          margin-right: 15rpx;

          image {
            width: 100%;
            height: 100%;
            border-radius: 10rpx;
          }
        }

        .box:last-child {
          margin-right: 30rpx;
        }
      }
    }
  }

  .theme {
    padding: 50rpx 0;

    .more {
      font-size: 32rpx;
      color: #888;
    }

    .content {
      margin-top: 30rpx;
      padding: 0 30rpx;
      display: grid;
      gap: 15rpx;
      grid-template-columns: repeat(3, 1fr);
    }
  }
}
</style>